home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / misc / emu / ATUtilities.lha / ATUtilities / ASM / UMB.ASM < prev    next >
Assembly Source File  |  2000-09-29  |  3KB  |  211 lines

  1. code   segment
  2.  
  3.  assume cs:code,ds:code
  4.  org 0
  5.  
  6. jIntNum   equ 30
  7.  
  8. befehl    equ 2
  9. status    equ 3
  10. end_adr   equ 14
  11.  
  12. cmd       equ 16384
  13. arg1      equ cmd+0
  14. arg2      equ cmd+2
  15. arg3      equ cmd+4
  16. arg4      equ cmd+6
  17. arg5      equ cmd+8
  18.  
  19. reg_bp    equ 22
  20. reg_sp    equ 20
  21. reg_ss    equ 18
  22. reg_cs    equ 16
  23. reg_es    equ 14
  24. reg_di    equ 12
  25. reg_ds    equ 10
  26. reg_si    equ 8
  27. reg_dx    equ 6
  28. reg_cx    equ 4
  29. reg_bx    equ 2
  30. reg_ax    equ 0
  31.  
  32. reg_dl    equ 6
  33. reg_cl    equ 4
  34. reg_bl    equ 2
  35. reg_al    equ 0
  36.  
  37. reg_dh    equ 7
  38. reg_ch    equ 5
  39. reg_bh    equ 3
  40. reg_ah    equ 1
  41.  
  42. erst_b    equ this byte
  43.  
  44.  
  45. umbtreiber:
  46.          dw -1,-1             ; DOS-Intern
  47.          db 0,80h             ; Flags
  48. soffset  dw offset strat      ; Strategie-Routine
  49. ioffset  dw offset intr       ; Interrupt-Routine
  50.          db "UMBXXXX0"        ; UMB-Kennung
  51.  
  52.  
  53. janus_ofs   dw (?)
  54. db_ptr      dw (?),(?)
  55.  
  56. old_adr      equ this dword
  57. old_adr_ofs  dw 0
  58. old_adr_seg  dw 0
  59.  
  60. old_int      equ this dword
  61. old_int_ofs  dw 0
  62. old_int_seg  dw 0
  63.  
  64.  ; ************ Strategie-Routine des Treibers
  65. strat  proc far
  66.  mov cs:db_ptr,bx
  67.  mov cs:db_ptr+2,es
  68.  ret
  69. strat  endp
  70.  
  71.  
  72. umb_handler  proc far
  73.  pushf
  74.  
  75.  
  76. jump_old_adr:
  77.  popf
  78.  jmp [cs:old_adr]
  79. umb_handler_ende:
  80.  popf
  81.  ret
  82. umb_handler  endp
  83.  
  84.  
  85.  ; ************ UMB-Interrupt fr Vektor $2F
  86. new_int  proc far
  87.  pushf
  88.  cmp ah,43h
  89.  jne jump_old_int
  90.  cmp al,10h
  91.  jne jump_old_int
  92.  mov bx,offset umb_handler
  93.  mov es,cs
  94.  popf
  95.  iret
  96. jump_old_int:
  97.  popf
  98.  jmp [cs:old_int]
  99. new_int  endp
  100.  
  101.  
  102. call_and_wait  proc near
  103.  mov ah,7
  104.  mov al,jIntNum
  105.  int 0b
  106.  mov ah,8
  107.  mov al,jIntNum
  108.  int 0b
  109.  ret
  110. call_and_wait  endp
  111.  
  112.  
  113.  ; ************ Interruptroutine des Treibers
  114. intr   proc far
  115.  push ax
  116.  push bx
  117.  push cx
  118.  push dx
  119.  push di
  120.  push si
  121.  push bp
  122.  push ds
  123.  push es
  124.  pushf
  125.  
  126.  push cs
  127.  pop ds
  128.  
  129.  les di,dword ptr db_ptr
  130.  mov bl,es:[di+befehl]
  131.  cmp bl,0
  132.  je bc_okay
  133.  
  134.  mov ax,8003h
  135.  jmp short intr_end
  136.  
  137. bc_okay:
  138.  call init
  139.  
  140. intr_end  label near
  141.  or ax,0100h
  142.  mov es:[di+status],ax
  143.  
  144.  popf
  145.  pop es
  146.  pop ds
  147.  pop bp
  148.  pop si
  149.  pop di
  150.  pop dx
  151.  pop cx
  152.  pop bx
  153.  pop ax
  154.  ret
  155. intr  endp
  156.  
  157.  
  158. init   proc near
  159.  mov word ptr es:[di+end_adr],offset ende
  160.  mov word ptr es:[di+end_adr+2],cs
  161.  
  162.  mov dx,offset initm
  163.  mov ah,9 
  164.  int 21h
  165.  
  166.  mov ah,43h
  167.  mov al,10h
  168.  int 2fh
  169.  mov old_adr_ofs,bx
  170.  mov old_adr_seg,es
  171.  
  172.  mov ah,35h
  173.  mov al,2fh
  174.  int 21h
  175.  mov old_int_ofs,bx
  176.  mov old_int_seg,es
  177.  
  178.  mov ah,25h
  179.  mov al,2fh
  180.  mov dx,offset new_int
  181.  int 21h 
  182.  
  183.  mov ah,1
  184.  mov al,jIntNum
  185.  int 0b
  186.  mov janus_ofs,di
  187.  
  188.  mov dx,offset sokay
  189.  mov ah,9
  190.  int 21h 
  191.  
  192.  xor ax,ax
  193.  ret
  194. init  endp
  195.  
  196.  
  197.  ; ************ Installationsmeldungen beim Start
  198. initm db "ATUtilities UMB-Manager. Copyright (C) 1993 by Thomas. Dreibholz",13,10
  199.       db "All rights reserved worldwide.",13,10    
  200.       db "ATUtilities is a part of the ATProject.",13,10
  201.       db "ATProject Copyright (C) 1992-1993 by MouseSoft Inc.",13,10,10,"$"
  202. sokay db "Treiber wurde erfolgreich installiert.",13,10,"$"
  203. kserv db "FEHLER: Amiga-Treiber ist nicht aktiv.",13,10
  204.       db "Treiber konnte nicht installiert werden.",13,10,10,"$"
  205.  
  206. ende  equ this byte
  207.  
  208. code  ends
  209.  end
  210.  
  211.